package com.chen.springboot.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chen.springboot.common.PageResult;
import com.chen.springboot.dto.*;
import com.chen.springboot.entity.Gender;
import com.chen.springboot.entity.Role;
import com.chen.springboot.entity.User;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface UserService extends IService<User> {

    /**
     *
     * @param user 用户注册
     */
    void register(User user);

    /**
     *
     * @param user 用户登录
     */
    UserDto login(User user);

    /**
     *
     * @param user 管理员登录
     */
    UserDto manageLogin(User user);

    /**
     *
     * @param user 新增方法
     */
//    void save(User user);
    void saveUser(User user);

    /**
     *
     * @param user 更新信息
     */
    void update(User user);

    /**
     *
     * @param id 删除信息
     */
    void delete(Long id);

    /**
     * 前后端的字段名不一定要一样，可以在前端传入数据的时候设置一下就可以了，只是比较麻烦，所以一般将实体的设置成一样
     * 请求分页数据
     * @param pageNum 当前页码
     * @param pageSize 每一页显示多少个数据
     */
//    Page<User> findPage(Integer pageNum, Integer pageSize);
//    Page<UserVO> findPage(Integer pageNum, Integer pageSize);

    Page<UserVO> findPage(ReqPageUserDTO req);

    /**
     * 根据id获取用户信息
     * @param userId 用户id
     */
    User getById(Integer userId);

    List<Gender> getGenderList(); // 获取性别列表

    /**
     * 根据用户身份
     * @param
     */
    List<Role> getRoleList();

    /**
     * chown 重置密码
     */
    void resetPassword(ResetPasswordDTO dto);


    /**
     * 批量删除用户
     */
    void deleteBatch(List<Integer> ids);

    /**
     * 新增用户
     */
    void addUserWithDefaultValues(User user);

    /**
     * 修改密码
     * @param dto 密码修改DTO
     * @return 是否修改成功
     */
    boolean changePassword(PasswordChangeDTO dto);

    /**
     * 获取所有的用户信息
     */
    PageResult<UserVO> findAllUsers(); // 👈 返回类型是 PageResult<UserVO>

    //下载模块excel模板
    void downloadUserTemplate(HttpServletResponse response);

    //导入用户信息
//    void importUsersFromExcel(MultipartFile file) throws Exception;
    void importUsersFromExcel(MultipartFile file, boolean isCover) throws Exception;

    void saveBatch(List<User> users);


    //导出用户信息
    void exportUserData(HttpServletResponse response);


}
